﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SistemaDeBastanteodePoderes.Persistencia;
using SistemaDeBastanteodePoderes.Dominio;

namespace SistemaDeBastanteodePoderes.Negocio
{
    public class CajeroServiceImpl : ICajeroService
    {
        #region region de dependencias
        IClienteDAO clienteDAO = null;
        #endregion

        #region operaciones de negocio
        public InformacionCajero VerificarPoder(string nroRUC, int tipoDocCodigo, string nroDoc, int poderCodigo, double importe)
        {
            Cliente clienteAUX = null;
            InformacionCajero infCaj = new InformacionCajero();
            foreach (Cliente cliente in clienteDAO.ListarTodos())
            {
                if (cliente.nroRUC == nroRUC)
                {
                    clienteAUX = cliente;
                    break;
                }
            }

            if (clienteAUX != null)
            {
                foreach (Representante representante in clienteAUX.representantes)
                {
                    if (representante.TipDoc.Codigo == tipoDocCodigo &&
                        representante.NroDoc == nroDoc)
                    {
                        foreach (Bastanteo bastanteo in clienteAUX.bastanteos)
                        {
                            if (bastanteo.PoderAsignado.Codigo == poderCodigo)
                            {
                                if (bastanteo.ImpLimite >= importe)
                                {
                                    if (DateTime.Now <= bastanteo.FecVencimiento)
                                    {
                                        infCaj.tienePoder = true;
                                        infCaj.clienteCodigo = clienteAUX.Codigo;
                                        infCaj.representanteCodigo = representante.Codigo;
                                        infCaj.poderCodigo = bastanteo.PoderAsignado.Codigo;
                                        infCaj.grupoBastanteo = bastanteo.Grupo;
                                        infCaj.fecVencimiento = bastanteo.FecVencimiento;
                                        infCaj.impLimite = bastanteo.ImpLimite;
                                        infCaj.tipoIntervencion = bastanteo.Intervencion.Intervencion;
                                        infCaj.grupoCombinacion = bastanteo.GruCombinacion;
                                        infCaj.mensaje = "Representante tiene Poder. Observe las condiciones de Intervencion, Grupo Combinacion, Importe Limite y Fecha de Vencimiento";

                                    }
                                    else
                                    {
                                        infCaj.tienePoder = false;
                                        infCaj.mensaje = "Poder esta vencido. Fecha actual mas reciente que el vencimiento del Poder";
                                    }
                                }
                                else
                                {
                                    infCaj.tienePoder = false;
                                    infCaj.mensaje = "Importe excede el limite permitido por el Poder";
                                }
                            }
                            else
                            {
                                infCaj.tienePoder = false;
                                infCaj.mensaje = "No se encontro poder para el representante";
                            }
                        }
                    }
                    else
                    {
                        infCaj.tienePoder = false;
                        infCaj.mensaje = "No se tipo y nro de documento como representante del cliente";
                    }
                }
            }
            else
            {
                infCaj.tienePoder = false;
                infCaj.mensaje = "No se encontro RUC entre los clientes registrados";
            }

            return infCaj;
        }
        #endregion
    }
}